/*
 * Copyright (c) 2016-present, Yann Collet, Facebook, Inc.
 * All rights reserved.
 *
 * This source code is licensed under both the BSD-style license (found in the
 * LICENSE file in the root directory of this source tree) and the GPLv2 (found
 * in the COPYING file in the root directory of this source tree).
 * You may select, at your option, one of the above-listed licenses.
 */

#ifndef ZSTD_OPT_H
#define ZSTD_OPT_H

#if defined(__cplusplus)
extern "C" {
#endif

#include "zstd_compress_internal.h"

/* used in ZSTD_loadDictionaryContent() */
void ZSTD_updateTree(ZSTD_matchState_t* ms, const BYTE* ip, const BYTE* iend);

size_t ZSTD_compressBlock_btopt(ZSTD_matchState_t* ms,
                                seqStore_t* seqStore,
                                U32 rep[ZSTD_REP_NUM],
                                void const* src,
                                size_t srcSize);
size_t ZSTD_compressBlock_btultra(ZSTD_matchState_t* ms,
                                  seqStore_t* seqStore,
                                  U32 rep[ZSTD_REP_NUM],
                                  void const* src,
                                  size_t srcSize);
size_t ZSTD_compressBlock_btultra2(ZSTD_matchState_t* ms,
                                   seqStore_t* seqStore,
                                   U32 rep[ZSTD_REP_NUM],
                                   void const* src,
                                   size_t srcSize);

size_t ZSTD_compressBlock_btopt_dictMatchState(ZSTD_matchState_t* ms,
                                               seqStore_t* seqStore,
                                               U32 rep[ZSTD_REP_NUM],
                                               void const* src,
                                               size_t srcSize);
size_t ZSTD_compressBlock_btultra_dictMatchState(ZSTD_matchState_t* ms,
                                                 seqStore_t* seqStore,
                                                 U32 rep[ZSTD_REP_NUM],
                                                 void const* src,
                                                 size_t srcSize);

size_t ZSTD_compressBlock_btopt_extDict(ZSTD_matchState_t* ms,
                                        seqStore_t* seqStore,
                                        U32 rep[ZSTD_REP_NUM],
                                        void const* src,
                                        size_t srcSize);
size_t ZSTD_compressBlock_btultra_extDict(ZSTD_matchState_t* ms,
                                          seqStore_t* seqStore,
                                          U32 rep[ZSTD_REP_NUM],
                                          void const* src,
                                          size_t srcSize);

/* note : no btultra2 variant for extDict nor dictMatchState,
 * because btultra2 is not meant to work with dictionaries
 * and is only specific for the first block (no prefix) */

#if defined(__cplusplus)
}
#endif

#endif /* ZSTD_OPT_H */
